﻿using OT.HikiSecureCenterApis.Req;
using OT.HikiSecureCenterApis.Res;
using OT.HikiSecureCenterApis.Service.Video.Req;
using OT.HikiSecureCenterApis.Service.Video.Res;
namespace OT.HikiSecureCenterApis.Service.Video
{
    /// <summary>
    /// 视频应用服务 --> 视频网管
    /// </summary>
    public partial class VideoService
    {
        /// <summary>
        /// 根据监控点列表查询录像完整性结果  /api/nms/v1/record/list
        /// 根据监控点编号、开始时间、结束时间，分页获取录像录像完整性记录。
        /// 级联场景下， 如需调用需要在 "系统配置–>网络管理配置–>下级平台管理” 中进行配置
        /// </summary>
        /// <remarks>综合安防管理平台iSecure Center V1.3及以上版本</remarks>
        /// <param name="indexCodes">必填 监控点编号集,可通过分页获取监控点资源获取返回参数cameraIndexCode</param>
        /// <param name="page">必填 页码，页大小，开始时间，结束时间</param>
        /// <returns><see cref="ResRecordList"/></returns>
        public async Task<ResParameter<ResPageData<ResRecordList>>?> RecordListAsync(IList<string> indexCodes, ReqPageDate page) =>
          await SecureCenterApis.PostAsync<ResPageData<ResRecordList>>("/api/nms/v1/record/list", 1.3, new
          {
              pageNo = page.pageNo,
              indexCodes = indexCodes,
              pageSize = page.pageSize,
              beginTime = page.startTime,
              endTime = page.endTime,
          });
        /// <summary>
        /// 根据监控点列表查询视频质量诊断结果  /api/nms/v1/vqd/list
        /// 根据监控点编号查询视频质量诊断结果，此接口可用作检测监控点位预览画面是否正常。
        /// 级联场景下， 如需调用需要在 "系统配置–>网络管理配置–>下级平台管理” 中进行配置
        /// </summary>
        /// <remarks>综合安防管理平台iSecure Center V1.3及以上版本</remarks>
        /// <param name="indexCodes">必填 监控点编号集,可通过分页获取监控点资源获取返回参数cameraIndexCode</param>
        /// <param name="page">必填 页码，页大小</param>
        /// <returns><see cref="ResVqpList"/></returns>
        public async Task<ResParameter<ResPageData<ResVqpList>>?> VqpListAsync(IList<string> indexCodes, ReqPage page) =>
  await SecureCenterApis.PostAsync<ResPageData<ResVqpList>>("/api/nms/v1/vqd/list", 1.3, new
  {
      pageNo = page.pageNo,
      indexCodes = indexCodes,
      pageSize = page.pageSize,
  });
        /// <summary>
        /// 获取监控点在线状态 /api/nms/v1/online/camera/get
        /// 级联场景下， 如需调用需要在 "系统配置–>网络管理配置–>下级平台管理” 中进行配置
        /// 当返回字段对应的值为空时，该字段不返回。
        /// </summary>
        /// <remarks>综合安防管理平台iSecure Center V1.3及以上版本</remarks>
        /// <param name="regionId">非必填 区域id；可通过区域信息接口获取获取返回参数indexCode</param>
        /// <param name="includeSubNode">非必填 是否包含下级区域中的资源数据，1包含，0不包含（若regionId为空，则该参数不起作用）</param>
        /// <param name="indexCodes">非必填  监控点编号列表，最大500， 可通过查询监控点列表v2获取返回参数indexCode</param>
        /// <param name="status">非必填 区域id；可通过区域信息接口获取获取返回参数indexCode</param>
        /// <param name="page">非必填 页码，页大小</param>
        /// <returns><see cref="ResGetCameraOnline"/></returns>
        public async Task<ResParameter<ResPageData<ResGetCameraOnline>>?> GetCameraOnlineAsync(string regionId = null, string includeSubNode = null,
            IList<string> indexCodes = null, string status = null, ReqPage page = null) =>
  await SecureCenterApis.PostAsync<ResPageData<ResGetCameraOnline>>("/api/nms/v1/online/camera/get", 1.3, new
  {
      regionId = regionId,
      includeSubNode = includeSubNode,
      indexCodes = indexCodes,
      status = status,
      pageNo = page?.pageNo ?? 1,
      pageSize = page?.pageSize ?? 10,
  });
        /// <summary>
        /// 获取编码设备在线状态 /api/nms/v1/online/encode_device/get
        /// 根据条件获取编码设备在线状态接口
        /// 级联场景下， 如需调用需要在 "系统配置–>网络管理配置–>下级平台管理” 中进行配置
        /// </summary>
        /// <remarks>综合安防管理平台iSecure Center V1.3及以上版本</remarks>
        /// <param name="regionId">非必填 区域id；可通过区域信息接口获取获取返回参数indexCode</param>
        /// <param name="ip">非必填 设备ip</param>
        /// <param name="includeSubNode">非必填 是否包含下级区域中的资源数据，1包含，0不包含（若regionId为空，则该参数不起作用）</param>
        /// <param name="indexCodes">非必填  监控点编号列表，最大500， 可通过查询监控点列表v2获取返回参数indexCode</param>
        /// <param name="status">非必填 区域id；可通过区域信息接口获取获取返回参数indexCode</param>
        /// <param name="page">非必填 页码，页大小</param>
        /// <returns><see cref="ResGetCameraOnline"/></returns>
        public async Task<ResParameter<ResPageData<ResGetCameraOnline>>?> GetEncodeDeviceOnlineAsync(string regionId = null, string ip = null, string includeSubNode = null,
            IList<string> indexCodes = null, string status = null, ReqPage page = null) =>
  await SecureCenterApis.PostAsync<ResPageData<ResGetCameraOnline>>("/api/nms/v1/online/encode_device/get", 1.3, new
  {
      regionId = regionId,
      includeSubNode = includeSubNode,
      indexCodes = indexCodes,
      status = status,
      pageNo = page?.pageNo ?? 1,
      pageSize = page?.pageSize ?? 10,
      ip = ip
  });
    }
}
